package com.knowledgegraph.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.knowledgegraph.entity.Relation;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 关系Mapper接口
 */
@Mapper
public interface RelationMapper extends BaseMapper<Relation> {

    /**
     * 根据条件查询关系列表（支持分页）
     * 
     * @param params 查询参数
     * @return 关系列表
     */
    List<Relation> selectRelationsWithConditions(@Param("params") Map<String, Object> params);
    
    /**
     * 根据条件查询关系列表（用于导出）
     * 
     * @param params 查询参数
     * @return 关系列表
     */
    List<Relation> selectRelationsForExport(@Param("params") Map<String, Object> params);
    
    /**
     * 获取全局统计数据
     * 
     * @return 统计数据
     */
    Map<String, Object> getGlobalStatistics();
    
    /**
     * 获取关系类型统计
     * 
     * @param graphId 图谱ID
     * @return 类型统计
     */
    List<Map<String, Object>> getRelationTypeStatistics(@Param("graphId") Long graphId);
    
    /**
     * 获取日期范围内的关系创建统计
     * 
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 创建统计
     */
    List<Map<String, Object>> getRelationCreateStatsByDateRange(@Param("startDate") LocalDateTime startDate, @Param("endDate") LocalDateTime endDate);
    
    /**
     * 获取日期范围内的关系更新统计
     * 
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 更新统计
     */
    List<Map<String, Object>> getRelationUpdateStatsByDateRange(@Param("startDate") LocalDateTime startDate, @Param("endDate") LocalDateTime endDate);
    
    /**
     * 获取用户统计数据
     * 
     * @param userId 用户ID
     * @return 统计数据
     */
    Map<String, Object> getUserStatistics(@Param("userId") Long userId);
    
    /**
     * 获取用户关系类型统计
     * 
     * @param userId 用户ID
     * @return 类型统计
     */
    List<Map<String, Object>> getUserRelationTypeStatistics(@Param("userId") Long userId);
    
    /**
     * 获取用户日期范围内的关系创建统计
     * 
     * @param userId 用户ID
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 创建统计
     */
    List<Map<String, Object>> getUserRelationCreateStatsByDateRange(@Param("userId") Long userId, @Param("startDate") LocalDateTime startDate, @Param("endDate") LocalDateTime endDate);
    
    /**
     * 获取用户日期范围内的关系更新统计
     * 
     * @param userId 用户ID
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 更新统计
     */
    List<Map<String, Object>> getUserRelationUpdateStatsByDateRange(@Param("userId") Long userId, @Param("startDate") LocalDateTime startDate, @Param("endDate") LocalDateTime endDate);
    
    /**
     * 根据图谱ID统计关系数量
     * 
     * @param graphId 图谱ID
     * @return 关系数量
     */
    Integer countByGraphId(@Param("graphId") Long graphId);
}
